package com.github.minio;

import io.minio.*;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;
import org.xmlpull.v1.XmlPullParserException;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by zhangcheng03 on 2021-6-19 10:31.
 */

public class MinioTest {

    @Test
    public void test() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        MinioClient minioClient = MinioClient.builder().endpoint("http://10.68.26.87:9000").credentials("minioadmin", "YO0!K4AAoX@tew").build();
        // 预上传地址
//        String presignedObjectUrl = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket("image").object(UUID.randomUUID().toString()).method(Method.GET).build());
//        System.out.println("预上传地址: " + presignedObjectUrl);

        Map<String, String> metadata = new HashMap<>();
        metadata.put("content-type", "image/jpeg");
        ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(UploadObjectArgs.builder()
                .bucket("default").object("2.png").filename("C:\\Users\\zhangcheng03\\Pictures\\city.jpg").userMetadata(metadata).build());

//        File file = new File("C:\\Users\\zhangcheng03\\Pictures\\微信图片_20200826161821.jpg");
//        FileInputStream fileInputStream = new FileInputStream(file);
//
//        ObjectWriteResponse objectWriteResponse1 = minioClient.putObject(PutObjectArgs.builder().bucket("image").object("微信图片_20200826161821.jpg")
//                .stream(fileInputStream, file.length(), 5 * 1024 * 1024).build());
//        System.out.println("成功了");

    }

    @Test
    public  void test2() throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
        try {
            // 参数为：图床，账号，密码
//            MinioClient minioClient = MinioClient.builder().endpoint("http://10.110.2.80:9001/").credentials("minioadmin", "YO0!K4AAoX@tew").build();
            MinioClient minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000/").credentials("minioadmin", "minioadmin").build();

            // 检查文件夹是否已经存在
            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket("image").build());
            if (isExist) {
                System.out.println("文件夹已经存在了");
            } else {
                // 创建一个名为image的文件夹
                System.out.println("文件夹还没存在");
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("image").build());
            }

            // 使用putObject上传一个文件到文件夹中。
            //参数为：文件夹，要存成的名字，要存的文件
            ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(UploadObjectArgs.builder().bucket("image").object("2.png").filename("C:\\Users\\zhangcheng03\\Pictures\\city.jpg").build());

            File file = new File("C:\\Users\\zhangcheng03\\Pictures\\微信图片_20200826161821.jpg");
            FileInputStream fileInputStream = new FileInputStream(file);

            ObjectWriteResponse objectWriteResponse1 = minioClient.putObject(PutObjectArgs.builder().bucket("image").object("微信图片_20200826161821.jpg")
                    .stream(fileInputStream, file.length(), 5 * 1024 * 1024).build());
            System.out.println("成功了");


            //使用getObject获取一个文件
            // 调用statObject()来判断对象是否存在。
            StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket("image").object("2.png").build());
            System.out.println(statObjectResponse);
            // 获取1.png的流并保存到photo.png文件中。
            //参数为：文件夹，要获得的文件，要写入的文件
//            GetObjectResponse getObjectResponse = minioClient.getObject(GetObjectArgs.builder().bucket("image").object("2.png").build());
            minioClient.downloadObject(DownloadObjectArgs.builder().bucket("image").object("微信图片_20200826161821.jpg").filename("C:\\Users\\zhangcheng03\\Desktop\\微信图片_20200826161821.png").build());
            GetObjectResponse getObjectResponse = minioClient.getObject(GetObjectArgs.builder().bucket("image").object("2.png").build());

            minioClient.downloadObject(DownloadObjectArgs.builder().bucket("image").object("1/ip记录.xlsx").filename("C:\\Users\\zhangcheng03\\Desktop\\ip记录2.xlsx").build());


        } catch (MinioException e) {
            System.out.println("错误: " + e);
        }
    }
/**
 * 以下是3.0写法
 * */
//    public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
//        try {
//            // 参数为：图床，账号，密码
//            MinioClient minioClient = new MinioClient("http://10.110.2.80:9001/", "minioadmin", "minioadmin");
//
//            // 检查文件夹是否已经存在
//            boolean isExist = minioClient.bucketExists("image");
//            if (isExist) {
//                System.out.println("文件夹已经存在了");
//            } else {
//                // 创建一个名为image的文件夹
//                System.out.println("文件夹还没存在");
//                minioClient.makeBucket("image");
//            }
//
//            // 使用putObject上传一个文件到文件夹中。
//            //参数为：文件夹，要存成的名字，要存的文件
//            minioClient.putObject("image", "1.png", "C:\\Users\\zhangcheng03\\Pictures\\city.jpg");
//            System.out.println("成功了");
//
//
//            //使用getObject获取一个文件
//            // 调用statObject()来判断对象是否存在。
//            minioClient.statObject("image", "1.png");
//            // 获取1.png的流并保存到photo.png文件中。
//            //参数为：文件夹，要获得的文件，要写入的文件
//            minioClient.getObject("image", "1.png", "C:\\Users\\zhangcheng03\\Desktop\\photo.png");
//
//
//        } catch (MinioException e) {
//            System.out.println("错误: " + e);
//        }
//    }
}
